<div class="HelpDiv">
	<div class="HelpDivHead">
		<div class="HelpTitle">Module</div>
		<div class="HelpMenu">
		  <div><a href="#Introduce">功能介绍</a></div>
		  <div><a href="#Property">属性</a></div>
		  <div><a href="#Event">事件</a></div>
		  <div><a href="#Function">方法</a></div>
		</div>
	</div>

	<div class="HelpBody">
		<div>
			<div id="Introduce" class="HelpBodyBig">功能介绍</div>
			<div class="HelpBodyMiddle">
				1，存在浏览器的前端Module，主要用来做数据收集、持久化，绑定数据表，简化程序员重复开发繁琐的数据收集、持久化代码；<br>
				2，也可以作为自定义临时Module，用来作为数据缓存<br>
				3，与前端控件紧密结合，比如：DataGrid的每一行数据就是Module里面的一条Record<br>
				4，与数据库完美结合，绑定数据的表，数据库的每一条记录对应Modlue中的一条Record，对数据库增、删、改、查询等操作可直接通过Module执行
			</div>
			<div class="HelpBodyMiddle">
				注意：整个Module都是围绕Record来操作，每条Record包含：状态（RowStatus）、是否选中（IsSelected）、是否隐藏（IsHide）三个属性，其中RowStatus值对应PublicEnum.RowStatus枚举，用来描述当前Record的状态，前端自动创建，提交到后端持久化时，将根据该状态判断增、删、改，共有4个值：
			</div>
			<div class="HelpBodySmall">
				<div>UnChange</div>
				<div>数据没发生变化，持久化时，该行数据将不会被提交到后端操作</div>
			</div>
			<div class="HelpBodySmall">
				<div>Insert</div>
				<div>新增</div>
			</div>
			<div class="HelpBodySmall">
				<div>Delete</div>
				<div>删除</div>
			</div>
			<div class="HelpBodySmall">
				<div>Modify</div>
				<div>修改</div>
			</div>
			
			<div class="HelpBodyMiddle">代码</div>
			<div class="HelpBodySmall">
				<div>创建</div>
				<div>PublicModule.initModule($scope, '表名')，自定义Module请遵守约定规则，在表名前面加&nbsp;"_"</div>
			</div>
			<div class="HelpBodySmall">
				<div>访问</div>
				<div>$scope.Module.表名</div>
			</div>
		</div>

		<div>
			<div id="Property" class="HelpBodyBig">属性</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">EntityName</div>
				<div>对应的实体名称</div>
			</div>
			<div class="HelpBodySmall">
				<div>IsEntityModule</div>
				<div>是否是实体module，为了代码易读，非实体module的名称前面加“_”，创建module时，也会自动将IsEntityModule设置为false</div>
			</div>
			<div class="HelpBodySmall">
				<div>Condition</div>
				<div>过滤条件，例如：$scope.Module.ItemMaster.Condition = {Code: 'XXX'}</div>
			</div>
			<div class="HelpBodySmall">
				<div>OrderBy</div>
				<div>排序条件，例如：$scope.Module.ItemMaster.OrderBy = {Code: -1}</div>
			</div>
			<div class="HelpBodySmall">
				<div>Populate</div>
				<div>关联展开子实体，实体字段必须是Schema.ObjectId类型，例如：$scope.Module.ItemMaster.Populate = {path: 'Department', select: 'Code Name'}</div>
			</div>
			<div class="HelpBodySmall">
				<div>ParentModule</div>
				<div>父module，有主子关系的主子module模式</div>
			</div>
			<div class="HelpBodySmall">
				<div>FocusedRecord</div>
				<div>焦点记录</div>
			</div>
			<div class="HelpBodySmall">
				<div>Records</div>
				<div>记录集合，不包含删除未持久化和隐藏的记录</div>
			</div>
			<div class="HelpBodySmall">
				<div>CacheRecords</div>
				<div>记录全集，包含删除未持久化和隐藏的记录</div>
			</div>
			<div class="HelpBodySmall">
				<div>SelectedRecords</div>
				<div>被选中的记录集合，适应表格有多选框的情况</div>
			</div>
			<div class="HelpBodySmall">
				<div>PageSize</div>
				<div>翻页模式下，一页查找的数据条数</div>
			</div>
			<div class="HelpBodySmall">
				<div>LoadMode</div>
				<div>
					数据加载模式，卡片默认为：PublicEnum.LoadMode.NoCacheAndPaging，表格默认为：PublicEnum.LoadMode.CacheAndPaging<br>
					PublicEnum.LoadMode枚举值：<br>
					CacheAndNoPaging&nbsp;&nbsp;全加载并且缓存，适用于Grid编辑<br>
					CacheAndPaging&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;缓存并且分页加载，适用于Grid浏览<br>
					NoCacheAndPaging&nbsp;&nbsp;不缓存并且分页，适用于卡片编辑
				</div>
			</div>
		</div>

		<br>		
		<div>
			<div id="Event" class="HelpBodyBig">事件</div>
			<div class="HelpBodySmall">
				<div>AfterOnLoad</div>
				<div>数据载入完成后触发，适用于数据加载完成后对自定义字段赋默认值等，例如：$scope.Module.ItemMaster.AfterOnLoad = function(records){ ... }</div>
			</div>
			<div class="HelpBodySmall">
				<div>AfterOnAdd</div>
				<div>新增数据后触发，适用于新增记录后赋默认值等，例如：$scope.Module.ItemMaster.AfterOnAdd = function(record){ ... }</div>
			</div>
		</div>

		<br>
		<div>
			<div id="Function" class="HelpBodyBig">方法</div>
			<div class="HelpBodyMiddle">load(condition, orderBy, callback)，根据module的LoadMode载入数据</div>
			<div class="HelpBodySmall">
				<div>condition</div>
				<div>查询条件，例如：{Code: 'XXX'}，默认为：module.Condition</div>
			</div>
			<div class="HelpBodySmall">
				<div>orderBy</div>
				<div>排序条件，例如：{Code: -1}，默认为：module.OrderBy</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(records)</div>
				<div>数据加载完成后的回调方法，并会将记录集合作为参数返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">loadAll(condition, orderBy, callback)，载入全部数据</div>
			<div class="HelpBodySmall">
				<div>condition</div>
				<div>查询条件，例如：{Code: 'XXX'}，默认为：module.Condition</div>
			</div>
			<div class="HelpBodySmall">
				<div>orderBy</div>
				<div>排序条件，例如：{Code: -1}，默认为：module.OrderBy</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(records)</div>
				<div>数据加载完成后的回调方法，并会将记录集合作为参数返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">loadByPage(condition, orderBy, pageNum, pageSize, callback)，载入指定页数据</div>
			<div class="HelpBodySmall">
				<div>condition</div>
				<div>查询条件，例如：{Code: 'XXX'}，默认为：module.Condition</div>
			</div>
			<div class="HelpBodySmall">
				<div>orderBy</div>
				<div>排序条件，例如：{Code: -1}，默认为：module.OrderBy</div>
			</div>
			<div class="HelpBodySmall">
				<div>pageNum</div>
				<div>整数类型，页号，默认为：0</div>
			</div>
			<div class="HelpBodySmall">
				<div>pageSize</div>
				<div>整数类型，每页查多少条数据，默认为：module.PageSize</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(records)</div>
				<div>数据加载完成后的回调方法，并会将记录集合作为参数返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">findById(id, callback)，按_id查找记录</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">id</div>
				<div>对应数据库“_id”字段</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(record)</div>
				<div>数据加载完成后的回调方法，并会将记录作为参数返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">find(condition, orderBy, populate, callback)，按条件查询数据</div>
			<div class="HelpBodySmall">
				<div>condition</div>
				<div>查询条件</div>
			</div>
			<div class="HelpBodySmall">
				<div>orderBy</div>
				<div>排序条件，例如：{Code: -1}</div>
			</div>
			<div class="HelpBodySmall">
				<div>populate</div>
				<div>关联展开子实体，例如：{path: 'Department', select: 'Code Name'}</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(records)</div>
				<div>数据加载完成后的回调方法，并会将记录集合作为参数返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">search(text, limit, callback)，根据Module.Condition条件全文检索</div>
			<div class="HelpBodyMiddle">&nbsp;&nbsp;&nbsp;&nbsp;本查询需开启数据库全文检索功能，基于性能考虑，本数据库暂未开启</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">text</div>
				<div>需要检索的文本</div>
			</div>
			<div class="HelpBodySmall">
				<div>limit</div>
				<div>返回限制条数</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(records)</div>
				<div>数据加载完成后的回调方法，并会将记录集合作为参数返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">save(successFun, errFunction)，保存数据</div>
			<div class="HelpBodySmall">
				<div>successFun</div>
				<div>数据保存成功后的回调方法，并会将record/data作为参数返回，卡片保存返回单条，记录集合返回保存结果信息，有默认方法处理：什么都不处理</div>
			</div>
			<div class="HelpBodySmall">
				<div>errFunction</div>
				<div>数据保存失败后的回调方法，有默认方法处理：报错提示</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">updateByValue(condition, value, completeFun)，根据条件更新记录</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">condition</div>
				<div>更新条件，例如：{_id: 'XXX'}</div>
			</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">value</div>
				<div>更新数据，例如：{Name: 'XXX'}</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(result)</div>
				<div>数据加载完成后的回调方法，并会将结果作为参数返回，例如：{ Data: true, Error: null }</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">add(recordIndex)，在Module里面新增一条记录，可按指定索引位置新增</div>
			<div class="HelpBodySmall">
				<div>recordIndex</div>
				<div>指定新增记录在集合中的索引位置</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">delete(callback)，删除记录，卡片直接持久化，DataGrid模式从Module删除，根据PageSize == 1判断</div>
			<div class="HelpBodySmall">
				<div>callback</div>
				<div>删除后的回调方法</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">cancel(callback)，放弃修改，重新载入数据</div>
			<div class="HelpBodySmall">
				<div>callback</div>
				<div>放弃操作后的回调方法</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">deleteSelecteds(callback)，争对列表的批量删除被勾选的记录并持久化数据库</div>
			<div class="HelpBodySmall">
				<div>callback</div>
				<div>删除后的回调方法</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">deleteRecord(record)，从Module删除记录</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">record</div>
				<div>要删除的记录</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">deleteRecords(records)，从Module删除记录集合</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">records</div>
				<div>要删除的记录集合</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">removeRecord(record)，从CacheRecords移除记录，将record在Module彻底移除，不再参与持久化操作</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">record</div>
				<div>要移除的记录</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">getRecordIndex(record)，获取记录在Records中的索引位置</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">record</div>
				<div>要查找索引的记录</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">findRecords(condition)，在Module中按条件查找记录</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">condition</div>
				<div>查找条件，例如：{Code: 'XXX'}</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">findRecordById(id)，在Module中按_id查找记录</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">id</div>
				<div>Record._id</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">sort(orderBy, callback)，在Module中将Records按条件排序</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">orderBy</div>
				<div>排序条件，例如：{Code: -1}</div>
			</div>
			<div class="HelpBodySmall">
				<div>callback(records)</div>
				<div>排序完成后的回调方法，并将排序后的记录集合返回</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">emitSaveEvent()，向主作用域发送保存完成事件，比如：保存完成后，通知DataGrid刷新</div>

			<br>
			<div class="HelpBodyMiddle">emitDeleteEvent()，向主作用域发送删除完成事件，比如：在Module手动删除数据完成后，刷新DataGrid，或者卡片加载新数据</div>

			<br>
			<div class="HelpBodyMiddle">emitOnLoadEvent()，向主作用域数据发送载入完成事件，比如：自己调用载入方法，必须通知DataGrid刷新</div>

			<br>
			<div class="HelpBodyMiddle">emitRowsDataChangeEvent(records)，向主作用域发送数据修改事件，比如：代码里面修改数据后，通知DataGrid刷新指定行数据</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">records</div>
				<div>修改的数据集合</div>
			</div>

			<br>
			<div class="HelpBodyMiddle">emitRowsDeleteEvent(records)，向主作用域发送删除行事件，比如：代码里面删除数据后，需通知DataGrid刷新</div>
			<div class="HelpBodySmall">
				<div class="HelpNotEmpty">records</div>
				<div>删除的记录集合</div>
			</div>
		</div>
	</div>
</div>